/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation
**
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**   * Redistributions of source code must retain the above copyright
**     notice, this list of conditions and the following disclaimer.
**   * Redistributions in binary form must reproduce the above copyright
**     notice, this list of conditions and the following disclaimer in
**     the documentation and/or other materials provided with the
**     distribution.
**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
**     the names of its contributors may be used to endorse or promote
**     products derived from this software without specific prior written
**     permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/



import QtQuick 1.0
import com.nokia.symbian 1.0

ApplicationWindow {
    id: window

    function setStateIfFound(target, name) {
        for (var i = 0; i < target.states.length; i++) {
            var curState = target.states[i];
            if(curState.name == name) {
                target.state = name
                break
            }
        }
    }

    ToolBarLayout {
        id: commonTools
        ToolButton {
            flat: true
            iconSource: "qrc:/qtg_toolbar_back.svg"
            onClicked: pageStack.depth <= 1 ? Qt.quit() : pageStack.pop()
        }
        ToolButton {
            flat: true
            iconSource: "qrc:/qtg_toolbar_options.svg"
            onClicked: viewMenu.open();
        }
    }

    Page {
        id: page
        anchors.fill: parent
        tools: commonTools

        Component.onCompleted: {
            if(screen.currentOrientation == Screen.Portrait) {
                setStateIfFound(page, "PortraitState")
            } else if(screen.currentOrientation == Screen.Landscape) {
                setStateIfFound(page, "LandscapeState")
            }
        }

        PageHeading{
            id: heading
            anchors.top: parent.top
            width: parent.width
            text: qsTr("Descriptors")
            fontItalic:true
        }

        // Text Editor used for displaying the descriptor operation results.
        Rectangle{
            id: editorLayout
            anchors.top: parent.top
            anchors.topMargin: 70
            anchors.left: parent.left
            anchors.leftMargin: 10
            anchors.right: parent.right
            anchors.rightMargin: 10
            anchors.bottom: parent.bottom
            anchors.bottomMargin: 60
            border.color: "grey"
            border.width: 4
        Flickable {
             id: flick
             width: editorLayout.width; height: editorLayout.height;
             contentWidth: textEdit.paintedWidth
             contentHeight: textEdit.paintedHeight
             clip: true

             function ensureVisible(r)
             {
                 if (contentX >= r.x)
                     contentX = r.x;
                 else if (contentX+width <= r.x+r.width)
                     contentX = r.x+r.width-width;
                 if (contentY >= r.y)
                     contentY = r.y;
                 else if (contentY+height <= r.y+r.height)
                     contentY = r.y+r.height-height;
             }

             TextEdit {
                 id: textEdit
                 width: flick.width
                 height: flick.height
                 anchors.top: parent.top
                 anchors.topMargin: 10
                 anchors.left: parent.left
                 anchors.leftMargin: 10
                 font.family: "Helvetica"
                 font.pointSize: 7
                 color: "darkblue"
                 text: "Welcome To Descriptors Example"
                 smooth: true
                 activeFocusOnPress: false
                 wrapMode: TextEdit.Wrap
                 onCursorRectangleChanged: flick.ensureVisible(cursorRectangle)
             }
         }
        }

        Menu{
            id: viewMenu

                content:
                Column{
                MenuItem {
                    text: "Declarations"

                    onClicked:
                    {

                        viewMenuDeclaration.open()
                        viewMenu.close()
                    }
                }
                MenuItem { text: "Manipulations"
                    onClicked:
                    {
                        viewMenuManipulations.open()
                        viewMenu.close()
                    }
                }
                MenuItem { text: "Other Buffers"
                    onClicked:
                    {
                        viewMenuOtherBuffer.open()
                        viewMenu.close()
                    }
                }


            }

        }



        Menu{
            id: viewMenuDeclaration

                content:
                Column{
                MenuItem {
                    text: "OnStack"

                    onClicked:
                    {
                        descriptors.createOnStack()
                        viewMenuDeclaration.close()
                        viewMenu.close()
                    }
                }
                MenuItem { text: "OnHeap"
                    onClicked:
                    {
                        descriptors.createOnHeap()
                        viewMenuDeclaration.close()
                        viewMenu.close()
                    }
                }
                MenuItem { text: "Literals"
                    onClicked:
                    {
                        descriptors.createLiterals()
                        viewMenuDeclaration.close()
                        viewMenu.close()
                    }
                }
               }

        }



        Menu{
            id: viewMenuManipulations

                content:
                Column{
                MenuItem {
                    text: "NonModifying Methods"

                    onClicked:
                    {
                        descriptors.callNonModifyingMethods()
                        viewMenuManipulations.close()
                        viewMenu.close()
                    }
                }
                MenuItem { text: "Modifying Methods"
                    onClicked:
                    {
                        descriptors.callModifyingMethods()
                        viewMenuManipulations.close()
                        viewMenu.close()
                    }
                }
                MenuItem { text: "Character Conversions"
                    onClicked:
                    {
                        descriptors.callCharacterConversions()
                        viewMenuManipulations.close()
                        viewMenu.close()
                    }
                }

                MenuItem { text: "Lexical Analysis"
                    onClicked:
                    {
                        descriptors.doLexicalAnalysis()
                        viewMenuManipulations.close()
                        viewMenu.close()
                    }
                }


            }

        }



        Menu{
            id: viewMenuOtherBuffer

                content:
                Column{
                MenuItem {
                    text: "Circular Buffers"

                    onClicked:
                    {
                        descriptors.useCircularBuffers()
                        viewMenuOtherBuffer.close()
                        viewMenu.close()
                    }
                }
                MenuItem { text: "Flat Dynamic Buffers"
                    onClicked:
                    {
                        descriptors.useFlatDynamicBuffers()
                        viewMenuOtherBuffer.close()
                        viewMenu.close()
                    }
                }
                MenuItem { text: "Segmntd Dynamic Buffers"
                    onClicked:
                    {
                        descriptors.useSegmentedDynamicBuffers()
                        viewMenuOtherBuffer.close()
                        viewMenu.close()
                    }
                }

                MenuItem { text: "Package Buffers"
                    onClicked:
                    {
                       descriptors.usePackageBuffers()
                       viewMenuOtherBuffer.close()
                        viewMenu.close()
                    }
                }


            }

        }

        // Invokes showResponse() method of Descriptors class when
        // printMessage signal is emitted.
        Connections {
            target: descriptors
            onPrintMessage: textEdit.text = descriptors.showResponse();
       }
    }
    Component.onCompleted: pageStack.push(page)
}
